<!DOCTYPE HTML>
<html>
<head>
<title>#ErrorStdOut | AutoHotkey</title>
<meta name="description" content="The #ErrorStdOut directive sends any syntax error that prevents a script from launching to the standard error stream (stderr) rather than displaying a dialog." />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>#ErrorStdOut</h1>

<p>把任何阻止脚本运行的语法错误发送到标准错误流(stderr) 而不显示一个对话框.</p>

<pre class="Syntax"><span class="func">#ErrorStdOut</span> <span class="optional">Encoding</span></pre>

<h2 id="Parameters">参数</h2>
<dl>
  <dt>Encoding <span class="ver">[v1.1.33+]:</span></dt>
  <dd><a href="FileEncoding.htm">编码字符串</a>, 指定如何对输出进行编码. 例如, <code>#ErrorStdOut UTF-8</code> 将错误信息编码为 UTF-8, 然后再发送到 stderr. 无论捕获输出的程序是什么, 都必须支持 UTF-8, 并且在某些情况下可能需要配置为期望如此. 如果省略, 默认为 CP0.</dd>
</dl>

<h2 id="Remarks">备注</h2>
<p><span class="ver">[AHK_L 42+]</span>: 错误输出到 stderr(标准错误) 而不是 stdout(标准输出). 命令行和高级编辑器往往会同时显示这些信息. 这种不太规范的情况仅影响 <span class="ver">[v1.1.19.01]</span> 之前的版本.</p>
<p>这个指令可以让类似 TextPad, SciTE, Crimson 和 EditPlus 这些高级编辑器在语法错误发生时跳到有问题的行. 添加 #ErrorStdOut 指令到每个脚本中通常比使用<a href="../Scripts.htm#cmd">命令行开关</a> <strong>/ErrorStdOut</strong> 更方便. (详情请参阅下面的设置说明)</p>
<p>因为 AutoHotkey 不是控制台程序, 错误将不会直接出现在命令行中. 这可以通过以下方法解决 1) <span class="ver">[v1.1.33+]</span> 使用 <a href="../misc/Ahk2ExeDirectives.htm#ConsoleApp">Ahk2Exe ConsoleApp 指令</a>编译脚本, 或 2) 通过管道或重定向捕获脚本的输出. 例如:</p>
<pre class="no-highlight">"C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" <strong>2&gt;&amp;1 |more</strong>
"C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" <strong>2&gt;""Syntax-Error Log.txt"</strong></pre>
<p>你还可以使用操作系统内置的 clip 命令(对于 Windows XP 及更低版本, 下载并使用 <a href="https://www.autohotkey.com/misc/cb.zip">cb.exe</a> 代替) 将输出直接管道到剪贴板. 例如:</p>
<pre class="no-highlight">"C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" <strong>2&gt;&amp;1 |clip</strong></pre>
<pre class="no-highlight">"C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "My Script.ahk" <strong>|cb.exe</strong> <em>; XP 系统.</em></pre>
<p class="note"><strong>注意</strong>: <code>2&gt;&amp;1</code> 将 stderr 重定向到 stdout, 而 <code>2&gt;<i>Filename</i></code> 只将 stderr 重定向到一个文件.</p>
<p>和其他指令一样, #ErrorStdOut 不能有条件地执行.</p>

<h2 id="Instructions_for_specific_editors">特定编辑器的设置说明:</h2>
<p><strong>EditPlus</strong>:</p>
<ol>
  <li>在菜单栏选择 Tools(工具) &gt; Configure User Tools(配置用户工具).</li>
  <li>点击按钮: Add Tool(增加工具) &gt; Program(程序)</li>
  <li>Menu Text(菜单名称): 可随意</li>
  <li>Command(命令)(修改为您的 AutoHotkey.exe 路径): C:\Program Files\AutoHotkey\AutoHotkey.exe</li>
  <li>Argument(参数): <code class="no-highlight">/ErrorStdOut "$(FilePath)"</code></li>
  <li>Initial directory(初始文件夹): <code>$(FileDir)</code></li>
  <li>Capture output(捕获输出): Yes</li>
</ol>
<p><strong>TextPad</strong>:</p>
<ol>
  <li>在菜单栏选择 Configure &gt; Preferences(配置 &gt; 参数).</li>
  <li>展开 Tools(工具) 菜单.</li>
  <li>点击 Add 按钮然后选择 "Program"(程序).</li>
  <li>复制并粘贴(修改为您的 cmd.exe 路径): <em>C:\Windows\System32\cmd.exe</em> -- 然后点击 OK.</li>
  <li>三击列表框中新添加的项(cmd.exe) 并将其重命名为您选择的自定义名称(如 Launch Script).</li>
  <li>点击 Apply(应用).</li>
  <li>从左侧树列表中选择新增的项, 然后填写下列信息:</li>
  <li>Command(应该已经填好): <code>cmd.exe</code>(或者是它的完整路径)</li>
  <li>Parameters(修改为您的 AutoHotkey.exe 路径): <code class="no-highlight">/c ""C:\Program Files\AutoHotkey\AutoHotkey.exe" /ErrorStdOut "$File""</code></li>
  <li>初始目录: <code>$FileDir</code></li>
  <li>选择下列框: 1) Run minimized(最小化运行); 2) Capture output(捕获输出).</li>
  <li>点击 OK 之后新添加的项就应该已经出现在 Tools 菜单中了.</li>
  </ol>

<h2 id="Related">相关</h2>
<p><a href="FileAppend.htm">FileAppend</a>(因为它也可以发送文本到 stderr 或 stdout)</p>
<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a class="ex_number" href="#ExBasic"></a> 发送任何阻止脚本启动的语法错误到 stderr, 而不是显示一个对话框.</p>
<pre>#ErrorStdOut</pre>
</div>

</body>
</html>